package com.wsoft.bpm.service;

import com.wsoft.bpm.vo.ApprovalNodeDataVO;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.task.Task;

import java.util.List;
import java.util.Map;

/**
 * 运行时服务
 *
 * @Author zhonglj
 * @Date 2024-08-28 14:14
 */
public interface RunProcessService {
    /**
     * 开启工作流
     *
     * @param processDefinitionKey 流程定义唯一键
     * @param tableName            对应数据表名
     * @param businessKey          业务数据唯一键
     * @param map                  自定义工作流流程参数
     * @param userId
     * @return string
     * @author zhonglj
     * @date 2024-09-19 16:04
     **/
    String startProcess(String processDefinitionKey, String tableName, String businessKey, Map map, String userId);

    /**
     * 流程同意
     *
     * @param taskId
     * @param comment
     * @return void
     * @author zhonglj
     * @date 2024-09-19 16:05
     **/
    void agree(String taskId, String comment);

    /**
     * 退回上一审批节点
     *
     * @param taskId
     * @param comment
     * @return void
     * @author zhonglj
     * @date 2024-10-08 15:49
     **/
    void backOne(String taskId, String comment);

    /**
     * 动态设置节点负责人
     *
     * @param taskId
     * @param assignee
     * @return void
     * @author zhonglj
     * @date 2024-10-08 16:01
     **/
    void setAssign(String taskId, String assignee);

    /**
     * 查询审批历史
     *
     * @param processInstanceId
     * @return java.util.List<java.util.Map>
     * @author zhonglj
     * @date 2024-10-08 16:03
     **/
    List<Map> history(String processInstanceId);

    /**
     * 退回到提交人
     *
     * @param processInstanceId
     * @param comment
     * @return void
     * @author zhonglj
     * @date 2024-10-08 16:19
     **/
    void rollback(String processInstanceId, String comment);

    /**
     * 查询待办列表
     *
     * @param
     * @return java.util.List<java.util.Map>
     * @author zhonglj
     * @date 2024-10-09 16:08
     **/
    List<Task> todoList();

    /**
     * 查询已办列表
     *
     * @param
     * @return java.util.List<org.activiti.engine.history.HistoricTaskInstance>
     * @author zhonglj
     * @date 2024-10-09 16:55
     **/
    List<HistoricTaskInstance> doneList();

    /**
     * 强制结束工作流程
     *
     * @param processInstanceId
     * @return void
     * @author zhonglj
     * @date 2024-10-10 13:35
     **/
    void stopProcess(String processInstanceId);

    /**
     * 根据任务id获取节点数据，用于控制页面显示、页面操作等
     *
     * @param businessKey
     * @param taskId
     * @return com.wsoft.bpm.vo.ApprovalNodeDataVO
     * @author zhonglj
     * @date 2024-10-14 9:38
     **/
    ApprovalNodeDataVO getNodeData(String businessKey, String taskId);
}
